#include <REGX52.H>
#include <intrins.h>
//SCL SDA 均要接一个上拉电阻 阻值约为4.7K。
//开漏输出和上拉电阻组成一个 “线与”的结构。解决了多机通信互相干扰的问题。
//开漏输出 输出1高电平的时候，为高阻态，引脚浮空，完全没有驱动能力。
sbit SCL=P1^0;
sbit SDA=P1^1;
void iic_start()
{
	SCL=1;
	SDA=1;//确保 SCL SDA都是为高电平
	SDA=0;//先拉低 SDA 发送开始信号
	SCL=0;//在拉低SCL
}

void iic_stop()
{
	SCL=0;
	SDA=0;
	SCL=1;
	SDA=1;
}

void iic_w(unsigned char dat)
{
	unsigned char a;
	for(a=0x80;a!=0;a=a>>1)
	{
		if((a&dat)==0)
			SDA=0;
		else
			SDA=1;
		SCL=1;//读数据
		SCL=0;
	}
}
unsigned char iic_r()
{
	unsigned char dat=0x00,i;
	SCL=0;
	SDA=1;//释放主权，将主权交给从机
	for(i=0;i<8;i++)
	{
		SCL=1;
		if(SDA==1){dat=dat|(0x80>>i);}
		SCL=0;
	}
	return dat;
	
}
unsigned char iic_r_ack()
{
	unsigned char ack;
	SDA=1;//释放主权，将主权交给从机
	SCL=1;
	ack=SDA;
	SCL=0;
	return ack;
}

void iic_w_ack(unsigned char ack)
{
	SDA=ack;
	SCL=1;
	SCL=0;
}














